EJS 是一個簡易的模板語法,又有高校的嵌入式 JavaScript 模板引擎,有點類似 ES6 的模板語法,只是這個是使用 ejs 的檔案格式中去撰寫 HTML 標籤,並且把一些迴圈的語法寫在模板上。
<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>
如上方片段範例程式碼所示,在雙角括號會使用 %
作為模板,並且寫入 JavaScript 的判斷以及變數將資料渲染在模板上,有點類似 PHP 的語法。另外還有一個也是很多人用的模板語法 pug,本系列練習會以 EJS 為主,因比較貼近 HTML 的寫法。
輸入以下指令安裝 EJS:
npm install -D ejs
安裝完後會看到 package.json
安裝好此套件。
{
"name": "nodejs",
"version": "1.0.0",
"description": "node practice",
"main": "firebase.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"app": "node app.js"
},
"keywords": [],
"author": "hsuchihting",
"license": "MIT",
"dependencies": {
"express": "^4.18.1"
},
"devDependencies": {
"ejs": "^3.1.8", // 安裝完成
}
}
在 app.js 載入 EJS 核心以及設定要讀取 EJS 的資料夾位置,以及告訴 express 要用 EJS 引擎跑模板。
app.js
// EJS 核心
const engine = require("ejs-locals");
app.engine("ejs", engine);
// 讀取 EJS 檔案位置
app.set('views','./views');
// 用 EJS 引擎跑模板
app.set("view engine", "ejs");
完成核心程式碼後,就在 /views
資料夾下新建一個 ejs 檔案,需要注意的地方是附檔名一定要打 ejs。
然後內容可以像在打 HTML 一樣建立頁面,程式碼如下。
index.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>
先前練習都是透過 res.send()
去渲染畫面,
app.js
app.get("/", (req, res) => {
res.send("<h1>這是主標題</h1>");
});
但透過 ejs 引擎選染,則是透過 render()
把 index.ejs
檔案渲染出來,如下方程式碼,
app.js
app.get("/", (req, res) => {
res.render("index");
});
此時輸入 node app.js 啟動專案會發現終端機一堆錯誤訊息,
PS C:\Users\2206670\Desktop\side project\nodejs> node app.js
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'ejs-locals'
Require stack:
- C:\Users\2206670\Desktop\side project\nodejs\app.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (C:\Users\2206670\Desktop\side project\nodejs\app.js:4:16)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [ 'C:\\Users\\2206670\\Desktop\\side project\\nodejs\\app.js' ]
}
會提示說少了 ejs-locals
的套件,所以要在安裝此套件,
npm install -D ejs-locals
完成後在 index.ejs 輸入一串 p
標籤,
index.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p>this is index.ejs file</p>
</body>
</html>
重新啟動專案 node app.js
,輸入網址 localhost:3000
就會看到輸入的文字渲染在畫面上囉!